package com.tecnoagrosoft.zafra.control.activity.fragment;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import com.tecnoagrosoft.zafra.control.activity.R;
import com.tecnoagrosoft.zafra.control.activity.SeguimientoActivity;
import com.tecnoagrosoft.zafra.control.db.GenericManager;
import com.tecnoagrosoft.zafra.control.db.GestorDB;
import com.tecnoagrosoft.zafra.control.model.android.ItemsList;
import com.tecnoagrosoft.zafra.control.utils.AdaptadorList;
import com.tecnoagrosoft.zafra.control.utils.UtilsGeneric;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class SeguimientoFragment extends Fragment implements SearchView.OnQueryTextListener {

	View rootView;
	private ListView lista;
	GestorDB gestorDB;
	AdaptadorList adapter;
	private SearchView mSearchView;
	private boolean showSearch = true;

	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

		rootView = inflater.inflate(R.layout.fragment_seguimiento, container, false);

		ImageButton btnShowSearch = (ImageButton) rootView.findViewById(R.id.imageButtonShowSearch);
		btnShowSearch.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				if (showSearch) {
					showSearch = false;
					mSearchView.setVisibility(View.VISIBLE);
				} else {
					showSearch = true;
					mSearchView.setVisibility(View.GONE);
				}
			}
		});

		mSearchView = (SearchView) rootView.findViewById(R.id.search_view_seguimientos);
		mSearchView.setVisibility(View.GONE);
		loadtable();
		setupSearchView();

		return rootView;
	}

	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);

		// escucho la respuesta de la actividad
		if (resultCode == Activity.RESULT_OK) {
			loadtable();
		}

	}

	private void loadtable() {

		ArrayList<ItemsList> datos = new ArrayList<ItemsList>();

		gestorDB = new GestorDB(rootView.getContext());
		SQLiteDatabase db = gestorDB.getWritableDatabase();

		GenericManager gM = new GenericManager(db);
		String sql = "Select  s._id, s.descripcion, s.fecha_creacion, s.tipo_zafra, s.finalizado FROM seguimiento_de_parcela as s LEFT JOIN parcela as p on p._id = s.parcela_id WHERE p.activo=1 and s.is_delete=0 ORDER BY s.fecha_creacion DESC";
		Cursor c = gM.executeSql(sql);

		int RImagen = R.drawable.seguimiento_no_fin;
		String descripcion, titulo = "";
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
		Date fechaCreacion = null;

		if (c.moveToFirst()) {
			do {
				RImagen = R.drawable.seguimiento_no_fin;
				try {
					fechaCreacion = df.parse(c.getString(c.getColumnIndex("fecha_creacion")));
				} catch (ParseException e) {
					Log.e(getString(R.string.falloParseo), c.getString(2));
				}
				SimpleDateFormat ft = new SimpleDateFormat("yyyy");
				titulo = UtilsGeneric.getTipoZafra(c.getInt(c.getColumnIndex("tipo_zafra"))) + " Zafra " + ft.format(fechaCreacion) + " - "
						+ createTitulo(c.getString(c.getColumnIndex("descripcion")));
				descripcion = createDescripcion(c.getString(c.getColumnIndex("descripcion")));

				if (c.getInt(c.getColumnIndex("finalizado")) == 1) {
					RImagen = R.drawable.seguimiento_fin;
				}
				datos.add(new ItemsList(Integer.parseInt(c.getString(0)), RImagen, titulo, descripcion));
			} while (c.moveToNext());
		} else {
			datos.add(new ItemsList(0, R.drawable.seguimiento, getString(R.string.noSeguimiento), ""));
		}

		c.close();
		db.close();
		gM.close();
		gestorDB.close();

		lista = (ListView) rootView.findViewById(R.id.ListView_seguimientos);
		lista.setAdapter(new AdaptadorList(rootView.getContext(), R.layout.item_list, datos) {
			@Override
			public void onEntrada(Object entrada, View view) {
				if (entrada != null) {
					TextView texto_id_item = (TextView) view.findViewById(R.id.texto_item_id);
					if (texto_id_item != null)
						texto_id_item.setText(((ItemsList) entrada).getId().toString());

					TextView texto_superior_entrada = (TextView) view.findViewById(R.id.textoTitulo_item_list);
					if (texto_superior_entrada != null)
						texto_superior_entrada.setText(((ItemsList) entrada).getTextoTitulo());

					TextView texto_inferior_entrada = (TextView) view.findViewById(R.id.textoDescripcion_item_list);
					if (texto_inferior_entrada != null)
						texto_inferior_entrada.setText(((ItemsList) entrada).getTextoDescripcion());

					ImageView imagen_entrada = (ImageView) view.findViewById(R.id.imagen_item_list);
					if (imagen_entrada != null)
						imagen_entrada.setImageResource(((ItemsList) entrada).getIdImagen());
				}
			}
		});

		lista.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> pariente, View view, int posicion, long id) {
				ItemsList elegido = (ItemsList) pariente.getItemAtPosition(posicion);

				if (elegido.getId() != 0) {
					Intent i = new Intent(rootView.getContext(), SeguimientoActivity.class);
					i.putExtra("id", elegido.getId());
					startActivity(i);
				}

			}
		});
		adapter = (AdaptadorList) lista.getAdapter();

	}

	private void setupSearchView() {
		mSearchView.setIconifiedByDefault(false);
		mSearchView.setOnQueryTextListener(this);
		mSearchView.setSubmitButtonEnabled(true);
		mSearchView.setQueryHint(getResources().getString(R.string.btn_search));

	}

	@Override
	public boolean onQueryTextChange(String newText) {

		if (TextUtils.isEmpty(newText)) {
			adapter.getFilter().filter("");
			lista.clearTextFilter();
		} else {

			lista.setTextFilterEnabled(true);
			lista.setSelectionAfterHeaderView();

			adapter.getFilter().filter(newText);

		}
		return true;
	}

	@Override
	public boolean onQueryTextSubmit(String arg0) {
		// TODO Auto-generated method stub
		return false;
	}

	private String createDescripcion(String cadena) {
		String descripcionView = "";

		String[] arrayCadena = cadena.split(",");

		for (int i = 0; i < arrayCadena.length; i++) {
			switch (i) {
			case 0:
				descripcionView += getString(R.string.enParcela) + " " + arrayCadena[i].toUpperCase();
				break;
			case 2:
				descripcionView += " " + getString(R.string.men_parcela_sembroVariedad_case2) + " " + arrayCadena[i].toUpperCase();
				break;

			}
		}

		return descripcionView;

	}

	private String createTitulo(String cadena) {
		String tituloView = "";

		String[] arrayCadena = cadena.split(",");

		for (int i = 0; i < arrayCadena.length; i++) {
			switch (i) {
			case 1:
				tituloView += arrayCadena[i].toUpperCase();
				break;

			}
		}
		return tituloView;

	}

}